package gebruikersinterface;

/**
* @author Stijn Vannieuwenhuyse
*/
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ResourceBundle;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import domein.DomeinController;
import exceptions.*;

@SuppressWarnings("serial")
public class Aanmelden extends JFrame {
	
	private ResourceBundle strings;
	
	private JTextField gebruikersnaamInvoer, wachtwoordInvoer;
	private JLabel gebruikersnaam, wachtwoord, error;
	private JButton aanmeldKnop, cancelKnop;
	private JComboBox kiesTaal;
	
	public Aanmelden(){
		super();
			this.setLayout(null);
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			this.setUndecorated(false);
			this.setSize(327,140);
			this.setResizable(false);
			this.setLocationRelativeTo(null);
		
		this.strings = Taal.getBundle("loginBundle");
		
		this.gebruikersnaam = new JLabel();
			this.gebruikersnaam.setBounds(5,5,100,20);
		this.gebruikersnaamInvoer = new JTextField(10);
			this.gebruikersnaamInvoer.setBounds(110,5,205,20);
		this.wachtwoord = new JLabel();
			this.wachtwoord.setBounds(5,30,100,20);
		this.wachtwoordInvoer = new JPasswordField(10);
			this.wachtwoordInvoer.setBounds(110,30,205,20);
		this.error = new JLabel();
			this.error.setBounds(5,55,320,20);
			this.error.setForeground(new Color(255,0,0));
		this.kiesTaal = new JComboBox(Taal.getTalen());
			this.kiesTaal.setBounds(5,80,100,20);
		this.aanmeldKnop = new JButton();
			this.aanmeldKnop.setBounds(215,80,100,20);
		this.cancelKnop = new JButton();
			this.cancelKnop.setBounds(110,80,100,20);
		
		this.vulLabels();
		
		this.kiesTaal.setMaximumRowCount(3);           
		this.kiesTaal.setSelectedIndex(Taal.getIndex());
		this.kiesTaal.addItemListener(
				new ItemListener() {
					public void itemStateChanged(ItemEvent event) {
						if ( event.getStateChange() == ItemEvent.SELECTED )
							Taal.setCurrentLocale(kiesTaal.getSelectedIndex()+1);
							vulLabels();
		            }		
				}
		);                         
		
		AanmeldHandler handler = new AanmeldHandler();
			gebruikersnaamInvoer.addActionListener(handler);
			wachtwoordInvoer.addActionListener(handler);
			aanmeldKnop.addActionListener(handler);
			
		this.cancelKnop.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event){
				System.exit(0);
			}
		});

		this.add(this.gebruikersnaam);
		this.add(this.gebruikersnaamInvoer);
		this.add(this.wachtwoord);
		this.add(this.wachtwoordInvoer);
		this.add(this.error);
		this.add(this.kiesTaal);
		this.add(this.cancelKnop);
		this.add(this.aanmeldKnop);
		
		this.setVisible(true);
	}
	
	class AanmeldHandler implements ActionListener {
		public void actionPerformed(ActionEvent event) {
			btnAanmelden(event);
		}
	}
	
	private void btnAanmelden(ActionEvent event){
		try{
			DomeinController.getInstance().aanmelden(gebruikersnaamInvoer.getText(), wachtwoordInvoer.getText());
			this.dispose();
			@SuppressWarnings("unused")
			Scherm scherm = new Scherm();			
		}
		catch(WrongLoginException wrongLogin){
			gebruikersnaamInvoer.setText("");
			wachtwoordInvoer.setText("");
			gebruikersnaamInvoer.requestFocus();
			error.setText(strings.getString("gebruikersnaamError"));
		}
		catch(WrongPasswordException wrongPassword){
			wachtwoordInvoer.setText("");
			wachtwoordInvoer.requestFocus();
			error.setText(strings.getString("wachtwoordError"));
		}
		catch(Exception exception){
			exception.printStackTrace();
		}
	}
	
	private void vulLabels() {
			this.strings = Taal.getBundle("loginBundle");
			this.setTitle("FloorMaster || " + this.strings.getString("loginKnop"));
			this.gebruikersnaam.setText(this.strings.getString("gebruikersnaamTekst"));
			this.wachtwoord.setText(this.strings.getString("wachtwoordTekst"));
			this.aanmeldKnop.setText(this.strings.getString("loginKnop"));
			this.cancelKnop.setText(this.strings.getString("annuleerKnop"));
			this.error.setText("");
	}
}